//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_spi(SotoInternal) import SotoCore

extension ControlTower {
    // MARK: Enums

    public enum BaselineOperationStatus: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case failed = "FAILED"
        case inProgress = "IN_PROGRESS"
        case succeeded = "SUCCEEDED"
        public var description: String { return self.rawValue }
    }

    public enum BaselineOperationType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disableBaseline = "DISABLE_BASELINE"
        case enableBaseline = "ENABLE_BASELINE"
        case resetEnabledBaseline = "RESET_ENABLED_BASELINE"
        case updateEnabledBaseline = "UPDATE_ENABLED_BASELINE"
        public var description: String { return self.rawValue }
    }

    public enum ControlOperationStatus: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case failed = "FAILED"
        case inProgress = "IN_PROGRESS"
        case succeeded = "SUCCEEDED"
        public var description: String { return self.rawValue }
    }

    public enum ControlOperationType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disableControl = "DISABLE_CONTROL"
        case enableControl = "ENABLE_CONTROL"
        case resetEnabledControl = "RESET_ENABLED_CONTROL"
        case updateEnabledControl = "UPDATE_ENABLED_CONTROL"
        public var description: String { return self.rawValue }
    }

    public enum DriftStatus: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case drifted = "DRIFTED"
        case inSync = "IN_SYNC"
        case notChecking = "NOT_CHECKING"
        case unknown = "UNKNOWN"
        public var description: String { return self.rawValue }
    }

    public enum EnabledBaselineDriftStatus: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case drifted = "DRIFTED"
        case inSync = "IN_SYNC"
        public var description: String { return self.rawValue }
    }

    public enum EnablementStatus: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case failed = "FAILED"
        case succeeded = "SUCCEEDED"
        case underChange = "UNDER_CHANGE"
        public var description: String { return self.rawValue }
    }

    public enum LandingZoneDriftStatus: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case drifted = "DRIFTED"
        case inSync = "IN_SYNC"
        public var description: String { return self.rawValue }
    }

    public enum LandingZoneOperationStatus: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case failed = "FAILED"
        case inProgress = "IN_PROGRESS"
        case succeeded = "SUCCEEDED"
        public var description: String { return self.rawValue }
    }

    public enum LandingZoneOperationType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case create = "CREATE"
        case delete = "DELETE"
        case reset = "RESET"
        case update = "UPDATE"
        public var description: String { return self.rawValue }
    }

    public enum LandingZoneStatus: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case active = "ACTIVE"
        case failed = "FAILED"
        case processing = "PROCESSING"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct BaselineOperation: AWSDecodableShape {
        /// The end time of the operation (if applicable), in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var endTime: Date?
        /// The identifier of the specified operation.
        public let operationIdentifier: String?
        /// An enumerated type (enum) with possible values of ENABLE_BASELINE, DISABLE_BASELINE, UPDATE_ENABLED_BASELINE, or RESET_ENABLED_BASELINE.
        public let operationType: BaselineOperationType?
        /// The start time of the operation, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var startTime: Date?
        /// An enumerated type (enum) with possible values of SUCCEEDED, FAILED, or IN_PROGRESS.
        public let status: BaselineOperationStatus?
        /// A status message that gives more information about the operation's status, if applicable.
        public let statusMessage: String?

        @inlinable
        public init(endTime: Date? = nil, operationIdentifier: String? = nil, operationType: BaselineOperationType? = nil, startTime: Date? = nil, status: BaselineOperationStatus? = nil, statusMessage: String? = nil) {
            self.endTime = endTime
            self.operationIdentifier = operationIdentifier
            self.operationType = operationType
            self.startTime = startTime
            self.status = status
            self.statusMessage = statusMessage
        }

        private enum CodingKeys: String, CodingKey {
            case endTime = "endTime"
            case operationIdentifier = "operationIdentifier"
            case operationType = "operationType"
            case startTime = "startTime"
            case status = "status"
            case statusMessage = "statusMessage"
        }
    }

    public struct BaselineSummary: AWSDecodableShape {
        /// The full ARN of a Baseline.
        public let arn: String
        /// A summary description of a Baseline.
        public let description: String?
        /// The human-readable name of a Baseline.
        public let name: String

        @inlinable
        public init(arn: String, description: String? = nil, name: String) {
            self.arn = arn
            self.description = description
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case description = "description"
            case name = "name"
        }
    }

    public struct ControlOperation: AWSDecodableShape {
        /// The controlIdentifier of the control for the operation.
        public let controlIdentifier: String?
        /// The controlIdentifier of the enabled control.
        public let enabledControlIdentifier: String?
        /// The time that the operation finished.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var endTime: Date?
        /// The identifier of the specified operation.
        public let operationIdentifier: String?
        /// One of ENABLE_CONTROL or DISABLE_CONTROL.
        public let operationType: ControlOperationType?
        /// The time that the operation began.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var startTime: Date?
        /// One of IN_PROGRESS, SUCEEDED, or FAILED.
        public let status: ControlOperationStatus?
        /// If the operation result is FAILED, this string contains a message explaining why the operation failed.
        public let statusMessage: String?
        /// The target upon which the control operation is working.
        public let targetIdentifier: String?

        @inlinable
        public init(controlIdentifier: String? = nil, enabledControlIdentifier: String? = nil, endTime: Date? = nil, operationIdentifier: String? = nil, operationType: ControlOperationType? = nil, startTime: Date? = nil, status: ControlOperationStatus? = nil, statusMessage: String? = nil, targetIdentifier: String? = nil) {
            self.controlIdentifier = controlIdentifier
            self.enabledControlIdentifier = enabledControlIdentifier
            self.endTime = endTime
            self.operationIdentifier = operationIdentifier
            self.operationType = operationType
            self.startTime = startTime
            self.status = status
            self.statusMessage = statusMessage
            self.targetIdentifier = targetIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case controlIdentifier = "controlIdentifier"
            case enabledControlIdentifier = "enabledControlIdentifier"
            case endTime = "endTime"
            case operationIdentifier = "operationIdentifier"
            case operationType = "operationType"
            case startTime = "startTime"
            case status = "status"
            case statusMessage = "statusMessage"
            case targetIdentifier = "targetIdentifier"
        }
    }

    public struct ControlOperationFilter: AWSEncodableShape {
        /// The set of controlIdentifier returned by the filter.
        public let controlIdentifiers: [String]?
        /// The set of ControlOperation objects returned by the filter.
        public let controlOperationTypes: [ControlOperationType]?
        /// The set controlIdentifier of enabled controls selected by the filter.
        public let enabledControlIdentifiers: [String]?
        /// Lists the status of control operations.
        public let statuses: [ControlOperationStatus]?
        /// The set of targetIdentifier objects returned by the filter.
        public let targetIdentifiers: [String]?

        @inlinable
        public init(controlIdentifiers: [String]? = nil, controlOperationTypes: [ControlOperationType]? = nil, enabledControlIdentifiers: [String]? = nil, statuses: [ControlOperationStatus]? = nil, targetIdentifiers: [String]? = nil) {
            self.controlIdentifiers = controlIdentifiers
            self.controlOperationTypes = controlOperationTypes
            self.enabledControlIdentifiers = enabledControlIdentifiers
            self.statuses = statuses
            self.targetIdentifiers = targetIdentifiers
        }

        public func validate(name: String) throws {
            try self.controlIdentifiers?.forEach {
                try validate($0, name: "controlIdentifiers[]", parent: name, max: 2048)
                try validate($0, name: "controlIdentifiers[]", parent: name, min: 20)
                try validate($0, name: "controlIdentifiers[]", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
            }
            try self.validate(self.controlIdentifiers, name: "controlIdentifiers", parent: name, max: 1)
            try self.validate(self.controlIdentifiers, name: "controlIdentifiers", parent: name, min: 1)
            try self.validate(self.controlOperationTypes, name: "controlOperationTypes", parent: name, max: 1)
            try self.validate(self.controlOperationTypes, name: "controlOperationTypes", parent: name, min: 1)
            try self.enabledControlIdentifiers?.forEach {
                try validate($0, name: "enabledControlIdentifiers[]", parent: name, max: 2048)
                try validate($0, name: "enabledControlIdentifiers[]", parent: name, min: 20)
                try validate($0, name: "enabledControlIdentifiers[]", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
            }
            try self.validate(self.enabledControlIdentifiers, name: "enabledControlIdentifiers", parent: name, max: 1)
            try self.validate(self.enabledControlIdentifiers, name: "enabledControlIdentifiers", parent: name, min: 1)
            try self.validate(self.statuses, name: "statuses", parent: name, max: 1)
            try self.validate(self.statuses, name: "statuses", parent: name, min: 1)
            try self.targetIdentifiers?.forEach {
                try validate($0, name: "targetIdentifiers[]", parent: name, max: 2048)
                try validate($0, name: "targetIdentifiers[]", parent: name, min: 20)
                try validate($0, name: "targetIdentifiers[]", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
            }
            try self.validate(self.targetIdentifiers, name: "targetIdentifiers", parent: name, max: 1)
            try self.validate(self.targetIdentifiers, name: "targetIdentifiers", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case controlIdentifiers = "controlIdentifiers"
            case controlOperationTypes = "controlOperationTypes"
            case enabledControlIdentifiers = "enabledControlIdentifiers"
            case statuses = "statuses"
            case targetIdentifiers = "targetIdentifiers"
        }
    }

    public struct ControlOperationSummary: AWSDecodableShape {
        /// The controlIdentifier of a control.
        public let controlIdentifier: String?
        /// The controlIdentifier of an enabled control.
        public let enabledControlIdentifier: String?
        /// The time at which the control operation was completed.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var endTime: Date?
        /// The unique identifier of a control operation.
        public let operationIdentifier: String?
        /// The type of operation.
        public let operationType: ControlOperationType?
        /// The time at which a control operation began.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var startTime: Date?
        /// The status of the specified control operation.
        public let status: ControlOperationStatus?
        /// A speficic message displayed as part of the control status.
        public let statusMessage: String?
        /// The unique identifier of the target of a control operation.
        public let targetIdentifier: String?

        @inlinable
        public init(controlIdentifier: String? = nil, enabledControlIdentifier: String? = nil, endTime: Date? = nil, operationIdentifier: String? = nil, operationType: ControlOperationType? = nil, startTime: Date? = nil, status: ControlOperationStatus? = nil, statusMessage: String? = nil, targetIdentifier: String? = nil) {
            self.controlIdentifier = controlIdentifier
            self.enabledControlIdentifier = enabledControlIdentifier
            self.endTime = endTime
            self.operationIdentifier = operationIdentifier
            self.operationType = operationType
            self.startTime = startTime
            self.status = status
            self.statusMessage = statusMessage
            self.targetIdentifier = targetIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case controlIdentifier = "controlIdentifier"
            case enabledControlIdentifier = "enabledControlIdentifier"
            case endTime = "endTime"
            case operationIdentifier = "operationIdentifier"
            case operationType = "operationType"
            case startTime = "startTime"
            case status = "status"
            case statusMessage = "statusMessage"
            case targetIdentifier = "targetIdentifier"
        }
    }

    public struct CreateLandingZoneInput: AWSEncodableShape {
        /// The manifest JSON file is a text file that describes your Amazon Web Services resources. For examples, review Launch your landing zone.
        public let manifest: AWSDocument
        /// Tags to be applied to the landing zone.
        public let tags: [String: String]?
        /// The landing zone version, for example, 3.0.
        public let version: String

        @inlinable
        public init(manifest: AWSDocument, tags: [String: String]? = nil, version: String) {
            self.manifest = manifest
            self.tags = tags
            self.version = version
        }

        public func validate(name: String) throws {
            try self.tags?.forEach {
                try validate($0.key, name: "tags.key", parent: name, max: 128)
                try validate($0.key, name: "tags.key", parent: name, min: 1)
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, max: 256)
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
            try self.validate(self.version, name: "version", parent: name, max: 10)
            try self.validate(self.version, name: "version", parent: name, min: 3)
            try self.validate(self.version, name: "version", parent: name, pattern: "^\\d+.\\d+$")
        }

        private enum CodingKeys: String, CodingKey {
            case manifest = "manifest"
            case tags = "tags"
            case version = "version"
        }
    }

    public struct CreateLandingZoneOutput: AWSDecodableShape {
        /// The ARN of the landing zone resource.
        public let arn: String
        /// A unique identifier assigned to a CreateLandingZone operation. You can use this identifier as an input of GetLandingZoneOperation to check the operation's status.
        public let operationIdentifier: String

        @inlinable
        public init(arn: String, operationIdentifier: String) {
            self.arn = arn
            self.operationIdentifier = operationIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case operationIdentifier = "operationIdentifier"
        }
    }

    public struct DeleteLandingZoneInput: AWSEncodableShape {
        /// The unique identifier of the landing zone.
        public let landingZoneIdentifier: String

        @inlinable
        public init(landingZoneIdentifier: String) {
            self.landingZoneIdentifier = landingZoneIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case landingZoneIdentifier = "landingZoneIdentifier"
        }
    }

    public struct DeleteLandingZoneOutput: AWSDecodableShape {
        /// &gt;A unique identifier assigned to a DeleteLandingZone operation. You can use this identifier as an input parameter of GetLandingZoneOperation to check the operation's status.
        public let operationIdentifier: String

        @inlinable
        public init(operationIdentifier: String) {
            self.operationIdentifier = operationIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case operationIdentifier = "operationIdentifier"
        }
    }

    public struct DisableBaselineInput: AWSEncodableShape {
        /// Identifier of the EnabledBaseline resource to be deactivated, in ARN format.
        public let enabledBaselineIdentifier: String

        @inlinable
        public init(enabledBaselineIdentifier: String) {
            self.enabledBaselineIdentifier = enabledBaselineIdentifier
        }

        public func validate(name: String) throws {
            try self.validate(self.enabledBaselineIdentifier, name: "enabledBaselineIdentifier", parent: name, max: 2048)
            try self.validate(self.enabledBaselineIdentifier, name: "enabledBaselineIdentifier", parent: name, min: 20)
            try self.validate(self.enabledBaselineIdentifier, name: "enabledBaselineIdentifier", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case enabledBaselineIdentifier = "enabledBaselineIdentifier"
        }
    }

    public struct DisableBaselineOutput: AWSDecodableShape {
        /// The ID (in UUID format) of the asynchronous DisableBaseline operation. This operationIdentifier is used to track status through calls to the GetBaselineOperation API.
        public let operationIdentifier: String

        @inlinable
        public init(operationIdentifier: String) {
            self.operationIdentifier = operationIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case operationIdentifier = "operationIdentifier"
        }
    }

    public struct DisableControlInput: AWSEncodableShape {
        /// The ARN of the control. Only Strongly recommended and Elective controls are permitted, with the exception of the Region deny control. For information on how to find the controlIdentifier, see the overview page.
        public let controlIdentifier: String
        /// The ARN of the organizational unit. For information on how to find the targetIdentifier, see the overview page.
        public let targetIdentifier: String

        @inlinable
        public init(controlIdentifier: String, targetIdentifier: String) {
            self.controlIdentifier = controlIdentifier
            self.targetIdentifier = targetIdentifier
        }

        public func validate(name: String) throws {
            try self.validate(self.controlIdentifier, name: "controlIdentifier", parent: name, max: 2048)
            try self.validate(self.controlIdentifier, name: "controlIdentifier", parent: name, min: 20)
            try self.validate(self.controlIdentifier, name: "controlIdentifier", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
            try self.validate(self.targetIdentifier, name: "targetIdentifier", parent: name, max: 2048)
            try self.validate(self.targetIdentifier, name: "targetIdentifier", parent: name, min: 20)
            try self.validate(self.targetIdentifier, name: "targetIdentifier", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case controlIdentifier = "controlIdentifier"
            case targetIdentifier = "targetIdentifier"
        }
    }

    public struct DisableControlOutput: AWSDecodableShape {
        /// The ID of the asynchronous operation, which is used to track status. The operation is available for 90 days.
        public let operationIdentifier: String

        @inlinable
        public init(operationIdentifier: String) {
            self.operationIdentifier = operationIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case operationIdentifier = "operationIdentifier"
        }
    }

    public struct DriftStatusSummary: AWSDecodableShape {
        ///  The drift status of the enabled control. Valid values:    DRIFTED: The enabledControl deployed in this configuration doesn’t match the configuration that Amazon Web Services Control Tower expected.     IN_SYNC: The enabledControl deployed in this configuration matches the configuration that Amazon Web Services Control Tower expected.    NOT_CHECKING: Amazon Web Services Control Tower does not check drift for this enabled control. Drift is not supported for the control type.    UNKNOWN: Amazon Web Services Control Tower is not able to check the drift status for the enabled control.
        public let driftStatus: DriftStatus?

        @inlinable
        public init(driftStatus: DriftStatus? = nil) {
            self.driftStatus = driftStatus
        }

        private enum CodingKeys: String, CodingKey {
            case driftStatus = "driftStatus"
        }
    }

    public struct EnableBaselineInput: AWSEncodableShape {
        /// The ARN of the baseline to be enabled.
        public let baselineIdentifier: String
        /// The specific version to be enabled of the specified baseline.
        public let baselineVersion: String
        /// A list of key-value objects that specify enablement parameters, where key is a string and value is a document of any type.
        public let parameters: [EnabledBaselineParameter]?
        /// Tags associated with input to EnableBaseline.
        public let tags: [String: String]?
        /// The ARN of the target on which the baseline will be enabled. Only OUs are supported as targets.
        public let targetIdentifier: String

        @inlinable
        public init(baselineIdentifier: String, baselineVersion: String, parameters: [EnabledBaselineParameter]? = nil, tags: [String: String]? = nil, targetIdentifier: String) {
            self.baselineIdentifier = baselineIdentifier
            self.baselineVersion = baselineVersion
            self.parameters = parameters
            self.tags = tags
            self.targetIdentifier = targetIdentifier
        }

        public func validate(name: String) throws {
            try self.validate(self.baselineIdentifier, name: "baselineIdentifier", parent: name, max: 2048)
            try self.validate(self.baselineIdentifier, name: "baselineIdentifier", parent: name, min: 20)
            try self.validate(self.baselineIdentifier, name: "baselineIdentifier", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
            try self.validate(self.baselineVersion, name: "baselineVersion", parent: name, max: 10)
            try self.validate(self.baselineVersion, name: "baselineVersion", parent: name, min: 1)
            try self.validate(self.baselineVersion, name: "baselineVersion", parent: name, pattern: "^\\d+(?:\\.\\d+){0,2}$")
            try self.tags?.forEach {
                try validate($0.key, name: "tags.key", parent: name, max: 128)
                try validate($0.key, name: "tags.key", parent: name, min: 1)
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, max: 256)
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
            try self.validate(self.targetIdentifier, name: "targetIdentifier", parent: name, max: 2048)
            try self.validate(self.targetIdentifier, name: "targetIdentifier", parent: name, min: 20)
            try self.validate(self.targetIdentifier, name: "targetIdentifier", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case baselineIdentifier = "baselineIdentifier"
            case baselineVersion = "baselineVersion"
            case parameters = "parameters"
            case tags = "tags"
            case targetIdentifier = "targetIdentifier"
        }
    }

    public struct EnableBaselineOutput: AWSDecodableShape {
        /// The ARN of the EnabledBaseline resource.
        public let arn: String
        /// The ID (in UUID format) of the asynchronous EnableBaseline operation. This operationIdentifier is used to track status through calls to the GetBaselineOperation API.
        public let operationIdentifier: String

        @inlinable
        public init(arn: String, operationIdentifier: String) {
            self.arn = arn
            self.operationIdentifier = operationIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case operationIdentifier = "operationIdentifier"
        }
    }

    public struct EnableControlInput: AWSEncodableShape {
        /// The ARN of the control. Only Strongly recommended and Elective controls are permitted, with the exception of the Region deny control. For information on how to find the controlIdentifier, see the overview page.
        public let controlIdentifier: String
        /// A list of input parameter values, which are specified to configure the control when you enable it.
        public let parameters: [EnabledControlParameter]?
        /// Tags to be applied to the EnabledControl resource.
        public let tags: [String: String]?
        /// The ARN of the organizational unit. For information on how to find the targetIdentifier, see the overview page.
        public let targetIdentifier: String

        @inlinable
        public init(controlIdentifier: String, parameters: [EnabledControlParameter]? = nil, tags: [String: String]? = nil, targetIdentifier: String) {
            self.controlIdentifier = controlIdentifier
            self.parameters = parameters
            self.tags = tags
            self.targetIdentifier = targetIdentifier
        }

        public func validate(name: String) throws {
            try self.validate(self.controlIdentifier, name: "controlIdentifier", parent: name, max: 2048)
            try self.validate(self.controlIdentifier, name: "controlIdentifier", parent: name, min: 20)
            try self.validate(self.controlIdentifier, name: "controlIdentifier", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
            try self.tags?.forEach {
                try validate($0.key, name: "tags.key", parent: name, max: 128)
                try validate($0.key, name: "tags.key", parent: name, min: 1)
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, max: 256)
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
            try self.validate(self.targetIdentifier, name: "targetIdentifier", parent: name, max: 2048)
            try self.validate(self.targetIdentifier, name: "targetIdentifier", parent: name, min: 20)
            try self.validate(self.targetIdentifier, name: "targetIdentifier", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case controlIdentifier = "controlIdentifier"
            case parameters = "parameters"
            case tags = "tags"
            case targetIdentifier = "targetIdentifier"
        }
    }

    public struct EnableControlOutput: AWSDecodableShape {
        /// The ARN of the EnabledControl resource.
        public let arn: String?
        /// The ID of the asynchronous operation, which is used to track status. The operation is available for 90 days.
        public let operationIdentifier: String

        @inlinable
        public init(arn: String? = nil, operationIdentifier: String) {
            self.arn = arn
            self.operationIdentifier = operationIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case operationIdentifier = "operationIdentifier"
        }
    }

    public struct EnabledBaselineDetails: AWSDecodableShape {
        /// The ARN of the EnabledBaseline resource.
        public let arn: String
        /// The specific Baseline enabled as part of the EnabledBaseline resource.
        public let baselineIdentifier: String
        /// The enabled version of the Baseline.
        public let baselineVersion: String?
        /// The drift status of the enabled baseline.
        public let driftStatusSummary: EnabledBaselineDriftStatusSummary?
        /// Shows the parameters that are applied when enabling this Baseline.
        public let parameters: [EnabledBaselineParameterSummary]?
        /// An ARN that represents the parent EnabledBaseline at the Organizational Unit (OU) level, from which the child EnabledBaseline inherits its configuration. The value is returned by GetEnabledBaseline.
        public let parentIdentifier: String?
        public let statusSummary: EnablementStatusSummary
        /// The target on which to enable the Baseline.
        public let targetIdentifier: String

        @inlinable
        public init(arn: String, baselineIdentifier: String, baselineVersion: String? = nil, driftStatusSummary: EnabledBaselineDriftStatusSummary? = nil, parameters: [EnabledBaselineParameterSummary]? = nil, parentIdentifier: String? = nil, statusSummary: EnablementStatusSummary, targetIdentifier: String) {
            self.arn = arn
            self.baselineIdentifier = baselineIdentifier
            self.baselineVersion = baselineVersion
            self.driftStatusSummary = driftStatusSummary
            self.parameters = parameters
            self.parentIdentifier = parentIdentifier
            self.statusSummary = statusSummary
            self.targetIdentifier = targetIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case baselineIdentifier = "baselineIdentifier"
            case baselineVersion = "baselineVersion"
            case driftStatusSummary = "driftStatusSummary"
            case parameters = "parameters"
            case parentIdentifier = "parentIdentifier"
            case statusSummary = "statusSummary"
            case targetIdentifier = "targetIdentifier"
        }
    }

    public struct EnabledBaselineDriftStatusSummary: AWSDecodableShape {
        /// The types of drift that can be detected for an enabled baseline. Amazon Web Services Control Tower detects inheritance drift on enabled baselines that apply at the OU level.
        public let types: EnabledBaselineDriftTypes?

        @inlinable
        public init(types: EnabledBaselineDriftTypes? = nil) {
            self.types = types
        }

        private enum CodingKeys: String, CodingKey {
            case types = "types"
        }
    }

    public struct EnabledBaselineDriftTypes: AWSDecodableShape {
        /// At least one account within the target OU does not match the baseline configuration defined on that OU. An account is in inheritance drift when it does not match the configuration of a parent OU, possibly a new parent OU, if the account is moved.
        public let inheritance: EnabledBaselineInheritanceDrift?

        @inlinable
        public init(inheritance: EnabledBaselineInheritanceDrift? = nil) {
            self.inheritance = inheritance
        }

        private enum CodingKeys: String, CodingKey {
            case inheritance = "inheritance"
        }
    }

    public struct EnabledBaselineFilter: AWSEncodableShape {
        /// Identifiers for the Baseline objects returned as part of the filter operation.
        public let baselineIdentifiers: [String]?
        /// A list of EnabledBaselineDriftStatus items for enabled baselines.
        public let inheritanceDriftStatuses: [EnabledBaselineDriftStatus]?
        /// An optional filter that sets up a list of parentIdentifiers to filter the results of the ListEnabledBaseline output.
        public let parentIdentifiers: [String]?
        /// A list of EnablementStatus items.
        public let statuses: [EnablementStatus]?
        /// Identifiers for the targets of the Baseline filter operation.
        public let targetIdentifiers: [String]?

        @inlinable
        public init(baselineIdentifiers: [String]? = nil, inheritanceDriftStatuses: [EnabledBaselineDriftStatus]? = nil, parentIdentifiers: [String]? = nil, statuses: [EnablementStatus]? = nil, targetIdentifiers: [String]? = nil) {
            self.baselineIdentifiers = baselineIdentifiers
            self.inheritanceDriftStatuses = inheritanceDriftStatuses
            self.parentIdentifiers = parentIdentifiers
            self.statuses = statuses
            self.targetIdentifiers = targetIdentifiers
        }

        public func validate(name: String) throws {
            try self.baselineIdentifiers?.forEach {
                try validate($0, name: "baselineIdentifiers[]", parent: name, max: 2048)
                try validate($0, name: "baselineIdentifiers[]", parent: name, min: 20)
                try validate($0, name: "baselineIdentifiers[]", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
            }
            try self.validate(self.baselineIdentifiers, name: "baselineIdentifiers", parent: name, max: 5)
            try self.validate(self.baselineIdentifiers, name: "baselineIdentifiers", parent: name, min: 1)
            try self.validate(self.inheritanceDriftStatuses, name: "inheritanceDriftStatuses", parent: name, max: 1)
            try self.validate(self.inheritanceDriftStatuses, name: "inheritanceDriftStatuses", parent: name, min: 1)
            try self.parentIdentifiers?.forEach {
                try validate($0, name: "parentIdentifiers[]", parent: name, max: 2048)
                try validate($0, name: "parentIdentifiers[]", parent: name, min: 20)
                try validate($0, name: "parentIdentifiers[]", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
            }
            try self.validate(self.parentIdentifiers, name: "parentIdentifiers", parent: name, max: 5)
            try self.validate(self.parentIdentifiers, name: "parentIdentifiers", parent: name, min: 1)
            try self.validate(self.statuses, name: "statuses", parent: name, max: 1)
            try self.validate(self.statuses, name: "statuses", parent: name, min: 1)
            try self.targetIdentifiers?.forEach {
                try validate($0, name: "targetIdentifiers[]", parent: name, max: 2048)
                try validate($0, name: "targetIdentifiers[]", parent: name, min: 20)
                try validate($0, name: "targetIdentifiers[]", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
            }
            try self.validate(self.targetIdentifiers, name: "targetIdentifiers", parent: name, max: 5)
            try self.validate(self.targetIdentifiers, name: "targetIdentifiers", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case baselineIdentifiers = "baselineIdentifiers"
            case inheritanceDriftStatuses = "inheritanceDriftStatuses"
            case parentIdentifiers = "parentIdentifiers"
            case statuses = "statuses"
            case targetIdentifiers = "targetIdentifiers"
        }
    }

    public struct EnabledBaselineInheritanceDrift: AWSDecodableShape {
        /// The inheritance drift status for enabled baselines.
        public let status: EnabledBaselineDriftStatus?

        @inlinable
        public init(status: EnabledBaselineDriftStatus? = nil) {
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case status = "status"
        }
    }

    public struct EnabledBaselineParameter: AWSEncodableShape {
        /// A string denoting the parameter key.
        public let key: String
        /// A low-level Document object of any type (for example, a Java Object).
        public let value: AWSDocument

        @inlinable
        public init(key: String, value: AWSDocument) {
            self.key = key
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case key = "key"
            case value = "value"
        }
    }

    public struct EnabledBaselineParameterSummary: AWSDecodableShape {
        /// A string denoting the parameter key.
        public let key: String
        /// A low-level document object of any type (for example, a Java Object).
        public let value: AWSDocument

        @inlinable
        public init(key: String, value: AWSDocument) {
            self.key = key
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case key = "key"
            case value = "value"
        }
    }

    public struct EnabledBaselineSummary: AWSDecodableShape {
        /// The ARN of the EnabledBaseline resource
        public let arn: String
        /// The specific baseline that is enabled as part of the EnabledBaseline resource.
        public let baselineIdentifier: String
        /// The enabled version of the baseline.
        public let baselineVersion: String?
        /// The drift status of the enabled baseline.
        public let driftStatusSummary: EnabledBaselineDriftStatusSummary?
        /// An ARN that represents an object returned by ListEnabledBaseline, to describe an enabled baseline.
        public let parentIdentifier: String?
        public let statusSummary: EnablementStatusSummary
        /// The target upon which the baseline is enabled.
        public let targetIdentifier: String

        @inlinable
        public init(arn: String, baselineIdentifier: String, baselineVersion: String? = nil, driftStatusSummary: EnabledBaselineDriftStatusSummary? = nil, parentIdentifier: String? = nil, statusSummary: EnablementStatusSummary, targetIdentifier: String) {
            self.arn = arn
            self.baselineIdentifier = baselineIdentifier
            self.baselineVersion = baselineVersion
            self.driftStatusSummary = driftStatusSummary
            self.parentIdentifier = parentIdentifier
            self.statusSummary = statusSummary
            self.targetIdentifier = targetIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case baselineIdentifier = "baselineIdentifier"
            case baselineVersion = "baselineVersion"
            case driftStatusSummary = "driftStatusSummary"
            case parentIdentifier = "parentIdentifier"
            case statusSummary = "statusSummary"
            case targetIdentifier = "targetIdentifier"
        }
    }

    public struct EnabledControlDetails: AWSDecodableShape {
        /// The ARN of the enabled control.
        public let arn: String?
        /// The control identifier of the enabled control. For information on how to find the controlIdentifier, see the overview page.
        public let controlIdentifier: String?
        /// The drift status of the enabled control.
        public let driftStatusSummary: DriftStatusSummary?
        /// Array of EnabledControlParameter objects.
        public let parameters: [EnabledControlParameterSummary]?
        /// The deployment summary of the enabled control.
        public let statusSummary: EnablementStatusSummary?
        /// The ARN of the organizational unit. For information on how to find the targetIdentifier, see the overview page.
        public let targetIdentifier: String?
        /// Target Amazon Web Services Regions for the enabled control.
        public let targetRegions: [Region]?

        @inlinable
        public init(arn: String? = nil, controlIdentifier: String? = nil, driftStatusSummary: DriftStatusSummary? = nil, parameters: [EnabledControlParameterSummary]? = nil, statusSummary: EnablementStatusSummary? = nil, targetIdentifier: String? = nil, targetRegions: [Region]? = nil) {
            self.arn = arn
            self.controlIdentifier = controlIdentifier
            self.driftStatusSummary = driftStatusSummary
            self.parameters = parameters
            self.statusSummary = statusSummary
            self.targetIdentifier = targetIdentifier
            self.targetRegions = targetRegions
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case controlIdentifier = "controlIdentifier"
            case driftStatusSummary = "driftStatusSummary"
            case parameters = "parameters"
            case statusSummary = "statusSummary"
            case targetIdentifier = "targetIdentifier"
            case targetRegions = "targetRegions"
        }
    }

    public struct EnabledControlFilter: AWSEncodableShape {
        /// The set of controlIdentifier returned by the filter.
        public let controlIdentifiers: [String]?
        /// A list of DriftStatus items.
        public let driftStatuses: [DriftStatus]?
        /// A list of EnablementStatus items.
        public let statuses: [EnablementStatus]?

        @inlinable
        public init(controlIdentifiers: [String]? = nil, driftStatuses: [DriftStatus]? = nil, statuses: [EnablementStatus]? = nil) {
            self.controlIdentifiers = controlIdentifiers
            self.driftStatuses = driftStatuses
            self.statuses = statuses
        }

        public func validate(name: String) throws {
            try self.controlIdentifiers?.forEach {
                try validate($0, name: "controlIdentifiers[]", parent: name, max: 2048)
                try validate($0, name: "controlIdentifiers[]", parent: name, min: 20)
                try validate($0, name: "controlIdentifiers[]", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
            }
            try self.validate(self.controlIdentifiers, name: "controlIdentifiers", parent: name, max: 1)
            try self.validate(self.controlIdentifiers, name: "controlIdentifiers", parent: name, min: 1)
            try self.validate(self.driftStatuses, name: "driftStatuses", parent: name, max: 1)
            try self.validate(self.driftStatuses, name: "driftStatuses", parent: name, min: 1)
            try self.validate(self.statuses, name: "statuses", parent: name, max: 1)
            try self.validate(self.statuses, name: "statuses", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case controlIdentifiers = "controlIdentifiers"
            case driftStatuses = "driftStatuses"
            case statuses = "statuses"
        }
    }

    public struct EnabledControlParameter: AWSEncodableShape {
        /// The key of a key/value pair.
        public let key: String
        /// The value of a key/value pair.
        public let value: AWSDocument

        @inlinable
        public init(key: String, value: AWSDocument) {
            self.key = key
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case key = "key"
            case value = "value"
        }
    }

    public struct EnabledControlParameterSummary: AWSDecodableShape {
        /// The key of a key/value pair.
        public let key: String
        /// The value of a key/value pair.
        public let value: AWSDocument

        @inlinable
        public init(key: String, value: AWSDocument) {
            self.key = key
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case key = "key"
            case value = "value"
        }
    }

    public struct EnabledControlSummary: AWSDecodableShape {
        /// The ARN of the enabled control.
        public let arn: String?
        /// The controlIdentifier of the enabled control.
        public let controlIdentifier: String?
        /// The drift status of the enabled control.
        public let driftStatusSummary: DriftStatusSummary?
        /// A short description of the status of the enabled control.
        public let statusSummary: EnablementStatusSummary?
        /// The ARN of the organizational unit.
        public let targetIdentifier: String?

        @inlinable
        public init(arn: String? = nil, controlIdentifier: String? = nil, driftStatusSummary: DriftStatusSummary? = nil, statusSummary: EnablementStatusSummary? = nil, targetIdentifier: String? = nil) {
            self.arn = arn
            self.controlIdentifier = controlIdentifier
            self.driftStatusSummary = driftStatusSummary
            self.statusSummary = statusSummary
            self.targetIdentifier = targetIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case controlIdentifier = "controlIdentifier"
            case driftStatusSummary = "driftStatusSummary"
            case statusSummary = "statusSummary"
            case targetIdentifier = "targetIdentifier"
        }
    }

    public struct EnablementStatusSummary: AWSDecodableShape {
        /// The last operation identifier for the enabled resource.
        public let lastOperationIdentifier: String?
        ///  The deployment status of the enabled resource. Valid values:    SUCCEEDED: The EnabledControl or EnabledBaseline configuration was deployed successfully.    UNDER_CHANGE: The EnabledControl or EnabledBaseline configuration is changing.     FAILED: The EnabledControl or EnabledBaseline configuration failed to deploy.
        public let status: EnablementStatus?

        @inlinable
        public init(lastOperationIdentifier: String? = nil, status: EnablementStatus? = nil) {
            self.lastOperationIdentifier = lastOperationIdentifier
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case lastOperationIdentifier = "lastOperationIdentifier"
            case status = "status"
        }
    }

    public struct GetBaselineInput: AWSEncodableShape {
        /// The ARN of the Baseline resource to be retrieved.
        public let baselineIdentifier: String

        @inlinable
        public init(baselineIdentifier: String) {
            self.baselineIdentifier = baselineIdentifier
        }

        public func validate(name: String) throws {
            try self.validate(self.baselineIdentifier, name: "baselineIdentifier", parent: name, pattern: "^arn:[a-z-]+:controltower:[a-z0-9-]*:[0-9]{0,12}:baseline/[A-Z0-9]{16}$")
        }

        private enum CodingKeys: String, CodingKey {
            case baselineIdentifier = "baselineIdentifier"
        }
    }

    public struct GetBaselineOperationInput: AWSEncodableShape {
        /// The operation ID returned from mutating asynchronous APIs (Enable, Disable, Update, Reset).
        public let operationIdentifier: String

        @inlinable
        public init(operationIdentifier: String) {
            self.operationIdentifier = operationIdentifier
        }

        public func validate(name: String) throws {
            try self.validate(self.operationIdentifier, name: "operationIdentifier", parent: name, max: 36)
            try self.validate(self.operationIdentifier, name: "operationIdentifier", parent: name, min: 36)
            try self.validate(self.operationIdentifier, name: "operationIdentifier", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case operationIdentifier = "operationIdentifier"
        }
    }

    public struct GetBaselineOperationOutput: AWSDecodableShape {
        /// A baselineOperation object that shows information about the specified operation ID.
        public let baselineOperation: BaselineOperation

        @inlinable
        public init(baselineOperation: BaselineOperation) {
            self.baselineOperation = baselineOperation
        }

        private enum CodingKeys: String, CodingKey {
            case baselineOperation = "baselineOperation"
        }
    }

    public struct GetBaselineOutput: AWSDecodableShape {
        /// The baseline ARN.
        public let arn: String
        /// A description of the baseline.
        public let description: String?
        /// A user-friendly name for the baseline.
        public let name: String

        @inlinable
        public init(arn: String, description: String? = nil, name: String) {
            self.arn = arn
            self.description = description
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case description = "description"
            case name = "name"
        }
    }

    public struct GetControlOperationInput: AWSEncodableShape {
        /// The ID of the asynchronous operation, which is used to track status. The operation is available for 90 days.
        public let operationIdentifier: String

        @inlinable
        public init(operationIdentifier: String) {
            self.operationIdentifier = operationIdentifier
        }

        public func validate(name: String) throws {
            try self.validate(self.operationIdentifier, name: "operationIdentifier", parent: name, max: 36)
            try self.validate(self.operationIdentifier, name: "operationIdentifier", parent: name, min: 36)
            try self.validate(self.operationIdentifier, name: "operationIdentifier", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case operationIdentifier = "operationIdentifier"
        }
    }

    public struct GetControlOperationOutput: AWSDecodableShape {
        /// An operation performed by the control.
        public let controlOperation: ControlOperation

        @inlinable
        public init(controlOperation: ControlOperation) {
            self.controlOperation = controlOperation
        }

        private enum CodingKeys: String, CodingKey {
            case controlOperation = "controlOperation"
        }
    }

    public struct GetEnabledBaselineInput: AWSEncodableShape {
        /// Identifier of the EnabledBaseline resource to be retrieved, in ARN format.
        public let enabledBaselineIdentifier: String

        @inlinable
        public init(enabledBaselineIdentifier: String) {
            self.enabledBaselineIdentifier = enabledBaselineIdentifier
        }

        public func validate(name: String) throws {
            try self.validate(self.enabledBaselineIdentifier, name: "enabledBaselineIdentifier", parent: name, max: 2048)
            try self.validate(self.enabledBaselineIdentifier, name: "enabledBaselineIdentifier", parent: name, min: 20)
            try self.validate(self.enabledBaselineIdentifier, name: "enabledBaselineIdentifier", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case enabledBaselineIdentifier = "enabledBaselineIdentifier"
        }
    }

    public struct GetEnabledBaselineOutput: AWSDecodableShape {
        /// Details of the EnabledBaseline resource.
        public let enabledBaselineDetails: EnabledBaselineDetails?

        @inlinable
        public init(enabledBaselineDetails: EnabledBaselineDetails? = nil) {
            self.enabledBaselineDetails = enabledBaselineDetails
        }

        private enum CodingKeys: String, CodingKey {
            case enabledBaselineDetails = "enabledBaselineDetails"
        }
    }

    public struct GetEnabledControlInput: AWSEncodableShape {
        /// The controlIdentifier of the enabled control.
        public let enabledControlIdentifier: String

        @inlinable
        public init(enabledControlIdentifier: String) {
            self.enabledControlIdentifier = enabledControlIdentifier
        }

        public func validate(name: String) throws {
            try self.validate(self.enabledControlIdentifier, name: "enabledControlIdentifier", parent: name, max: 2048)
            try self.validate(self.enabledControlIdentifier, name: "enabledControlIdentifier", parent: name, min: 20)
            try self.validate(self.enabledControlIdentifier, name: "enabledControlIdentifier", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case enabledControlIdentifier = "enabledControlIdentifier"
        }
    }

    public struct GetEnabledControlOutput: AWSDecodableShape {
        /// Information about the enabled control.
        public let enabledControlDetails: EnabledControlDetails

        @inlinable
        public init(enabledControlDetails: EnabledControlDetails) {
            self.enabledControlDetails = enabledControlDetails
        }

        private enum CodingKeys: String, CodingKey {
            case enabledControlDetails = "enabledControlDetails"
        }
    }

    public struct GetLandingZoneInput: AWSEncodableShape {
        /// The unique identifier of the landing zone.
        public let landingZoneIdentifier: String

        @inlinable
        public init(landingZoneIdentifier: String) {
            self.landingZoneIdentifier = landingZoneIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case landingZoneIdentifier = "landingZoneIdentifier"
        }
    }

    public struct GetLandingZoneOperationInput: AWSEncodableShape {
        /// A unique identifier assigned to a landing zone operation.
        public let operationIdentifier: String

        @inlinable
        public init(operationIdentifier: String) {
            self.operationIdentifier = operationIdentifier
        }

        public func validate(name: String) throws {
            try self.validate(self.operationIdentifier, name: "operationIdentifier", parent: name, max: 36)
            try self.validate(self.operationIdentifier, name: "operationIdentifier", parent: name, min: 36)
            try self.validate(self.operationIdentifier, name: "operationIdentifier", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case operationIdentifier = "operationIdentifier"
        }
    }

    public struct GetLandingZoneOperationOutput: AWSDecodableShape {
        /// Details about a landing zone operation.
        public let operationDetails: LandingZoneOperationDetail

        @inlinable
        public init(operationDetails: LandingZoneOperationDetail) {
            self.operationDetails = operationDetails
        }

        private enum CodingKeys: String, CodingKey {
            case operationDetails = "operationDetails"
        }
    }

    public struct GetLandingZoneOutput: AWSDecodableShape {
        /// Information about the landing zone.
        public let landingZone: LandingZoneDetail

        @inlinable
        public init(landingZone: LandingZoneDetail) {
            self.landingZone = landingZone
        }

        private enum CodingKeys: String, CodingKey {
            case landingZone = "landingZone"
        }
    }

    public struct LandingZoneDetail: AWSDecodableShape {
        /// The ARN of the landing zone.
        public let arn: String?
        /// The drift status of the landing zone.
        public let driftStatus: LandingZoneDriftStatusSummary?
        /// The latest available version of the landing zone.
        public let latestAvailableVersion: String?
        /// The landing zone manifest JSON text file that specifies the landing zone configurations.
        public let manifest: AWSDocument
        /// The landing zone deployment status. One of ACTIVE, PROCESSING, FAILED.
        public let status: LandingZoneStatus?
        /// The landing zone's current deployed version.
        public let version: String

        @inlinable
        public init(arn: String? = nil, driftStatus: LandingZoneDriftStatusSummary? = nil, latestAvailableVersion: String? = nil, manifest: AWSDocument, status: LandingZoneStatus? = nil, version: String) {
            self.arn = arn
            self.driftStatus = driftStatus
            self.latestAvailableVersion = latestAvailableVersion
            self.manifest = manifest
            self.status = status
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case driftStatus = "driftStatus"
            case latestAvailableVersion = "latestAvailableVersion"
            case manifest = "manifest"
            case status = "status"
            case version = "version"
        }
    }

    public struct LandingZoneDriftStatusSummary: AWSDecodableShape {
        /// The drift status of the landing zone.  Valid values:    DRIFTED: The landing zone deployed in this configuration does not match the configuration that Amazon Web Services Control Tower expected.     IN_SYNC: The landing zone deployed in this configuration matches the configuration that Amazon Web Services Control Tower expected.
        public let status: LandingZoneDriftStatus?

        @inlinable
        public init(status: LandingZoneDriftStatus? = nil) {
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case status = "status"
        }
    }

    public struct LandingZoneOperationDetail: AWSDecodableShape {
        /// The landing zone operation end time.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var endTime: Date?
        /// The operationIdentifier of the landing zone operation.
        public let operationIdentifier: String?
        /// The landing zone operation type.  Valid values:    DELETE: The DeleteLandingZone operation.     CREATE: The CreateLandingZone operation.     UPDATE: The UpdateLandingZone operation.     RESET: The ResetLandingZone operation.
        public let operationType: LandingZoneOperationType?
        /// The landing zone operation start time.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var startTime: Date?
        /// Valid values:    SUCCEEDED: The landing zone operation succeeded.     IN_PROGRESS: The landing zone operation is in progress.     FAILED: The landing zone operation failed.
        public let status: LandingZoneOperationStatus?
        /// If the operation result is FAILED, this string contains a message explaining why the operation failed.
        public let statusMessage: String?

        @inlinable
        public init(endTime: Date? = nil, operationIdentifier: String? = nil, operationType: LandingZoneOperationType? = nil, startTime: Date? = nil, status: LandingZoneOperationStatus? = nil, statusMessage: String? = nil) {
            self.endTime = endTime
            self.operationIdentifier = operationIdentifier
            self.operationType = operationType
            self.startTime = startTime
            self.status = status
            self.statusMessage = statusMessage
        }

        private enum CodingKeys: String, CodingKey {
            case endTime = "endTime"
            case operationIdentifier = "operationIdentifier"
            case operationType = "operationType"
            case startTime = "startTime"
            case status = "status"
            case statusMessage = "statusMessage"
        }
    }

    public struct LandingZoneOperationFilter: AWSEncodableShape {
        /// The statuses of the set of landing zone operations selected by the filter.
        public let statuses: [LandingZoneOperationStatus]?
        /// The set of landing zone operation types selected by the filter.
        public let types: [LandingZoneOperationType]?

        @inlinable
        public init(statuses: [LandingZoneOperationStatus]? = nil, types: [LandingZoneOperationType]? = nil) {
            self.statuses = statuses
            self.types = types
        }

        public func validate(name: String) throws {
            try self.validate(self.statuses, name: "statuses", parent: name, max: 1)
            try self.validate(self.statuses, name: "statuses", parent: name, min: 1)
            try self.validate(self.types, name: "types", parent: name, max: 1)
            try self.validate(self.types, name: "types", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case statuses = "statuses"
            case types = "types"
        }
    }

    public struct LandingZoneOperationSummary: AWSDecodableShape {
        /// The operationIdentifier of the landing zone operation.
        public let operationIdentifier: String?
        /// The type of the landing zone operation.
        public let operationType: LandingZoneOperationType?
        /// The status of the landing zone operation.
        public let status: LandingZoneOperationStatus?

        @inlinable
        public init(operationIdentifier: String? = nil, operationType: LandingZoneOperationType? = nil, status: LandingZoneOperationStatus? = nil) {
            self.operationIdentifier = operationIdentifier
            self.operationType = operationType
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case operationIdentifier = "operationIdentifier"
            case operationType = "operationType"
            case status = "status"
        }
    }

    public struct LandingZoneSummary: AWSDecodableShape {
        /// The ARN of the landing zone.
        public let arn: String?

        @inlinable
        public init(arn: String? = nil) {
            self.arn = arn
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
        }
    }

    public struct ListBaselinesInput: AWSEncodableShape {
        /// The maximum number of results to be shown.
        public let maxResults: Int?
        /// A pagination token.
        public let nextToken: String?

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 100)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 4)
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "maxResults"
            case nextToken = "nextToken"
        }
    }

    public struct ListBaselinesOutput: AWSDecodableShape {
        /// A list of Baseline object details.
        public let baselines: [BaselineSummary]
        /// A pagination token.
        public let nextToken: String?

        @inlinable
        public init(baselines: [BaselineSummary], nextToken: String? = nil) {
            self.baselines = baselines
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case baselines = "baselines"
            case nextToken = "nextToken"
        }
    }

    public struct ListControlOperationsInput: AWSEncodableShape {
        /// An input filter for the ListControlOperations API that lets you select the types of control operations to view.
        public let filter: ControlOperationFilter?
        /// The maximum number of results to be shown.
        public let maxResults: Int?
        /// A pagination token.
        public let nextToken: String?

        @inlinable
        public init(filter: ControlOperationFilter? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.filter = filter
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.filter?.validate(name: "\(name).filter")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 100)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: "\\S+")
        }

        private enum CodingKeys: String, CodingKey {
            case filter = "filter"
            case maxResults = "maxResults"
            case nextToken = "nextToken"
        }
    }

    public struct ListControlOperationsOutput: AWSDecodableShape {
        /// Returns a list of output from control operations.
        public let controlOperations: [ControlOperationSummary]
        /// A pagination token.
        public let nextToken: String?

        @inlinable
        public init(controlOperations: [ControlOperationSummary], nextToken: String? = nil) {
            self.controlOperations = controlOperations
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case controlOperations = "controlOperations"
            case nextToken = "nextToken"
        }
    }

    public struct ListEnabledBaselinesInput: AWSEncodableShape {
        /// A filter applied on the ListEnabledBaseline operation. Allowed filters are baselineIdentifiers and targetIdentifiers. The filter can be applied for either, or both.
        public let filter: EnabledBaselineFilter?
        /// A value that can be set to include the child enabled baselines in responses. The default value is false.
        public let includeChildren: Bool?
        /// The maximum number of results to be shown.
        public let maxResults: Int?
        /// A pagination token.
        public let nextToken: String?

        @inlinable
        public init(filter: EnabledBaselineFilter? = nil, includeChildren: Bool? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.filter = filter
            self.includeChildren = includeChildren
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.filter?.validate(name: "\(name).filter")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 100)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 5)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: "\\S+")
        }

        private enum CodingKeys: String, CodingKey {
            case filter = "filter"
            case includeChildren = "includeChildren"
            case maxResults = "maxResults"
            case nextToken = "nextToken"
        }
    }

    public struct ListEnabledBaselinesOutput: AWSDecodableShape {
        /// Retuens a list of summaries of EnabledBaseline resources.
        public let enabledBaselines: [EnabledBaselineSummary]
        /// A pagination token.
        public let nextToken: String?

        @inlinable
        public init(enabledBaselines: [EnabledBaselineSummary], nextToken: String? = nil) {
            self.enabledBaselines = enabledBaselines
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case enabledBaselines = "enabledBaselines"
            case nextToken = "nextToken"
        }
    }

    public struct ListEnabledControlsInput: AWSEncodableShape {
        /// An input filter for the ListEnabledControls API that lets you select the types of control operations to view.
        public let filter: EnabledControlFilter?
        /// How many results to return per API call.
        public let maxResults: Int?
        /// The token to continue the list from a previous API call with the same parameters.
        public let nextToken: String?
        /// The ARN of the organizational unit. For information on how to find the targetIdentifier, see the overview page.
        public let targetIdentifier: String?

        @inlinable
        public init(filter: EnabledControlFilter? = nil, maxResults: Int? = nil, nextToken: String? = nil, targetIdentifier: String? = nil) {
            self.filter = filter
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.targetIdentifier = targetIdentifier
        }

        public func validate(name: String) throws {
            try self.filter?.validate(name: "\(name).filter")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 200)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.targetIdentifier, name: "targetIdentifier", parent: name, max: 2048)
            try self.validate(self.targetIdentifier, name: "targetIdentifier", parent: name, min: 20)
            try self.validate(self.targetIdentifier, name: "targetIdentifier", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case filter = "filter"
            case maxResults = "maxResults"
            case nextToken = "nextToken"
            case targetIdentifier = "targetIdentifier"
        }
    }

    public struct ListEnabledControlsOutput: AWSDecodableShape {
        /// Lists the controls enabled by Amazon Web Services Control Tower on the specified organizational unit and the accounts it contains.
        public let enabledControls: [EnabledControlSummary]
        /// Retrieves the next page of results. If the string is empty, the response is the end of the results.
        public let nextToken: String?

        @inlinable
        public init(enabledControls: [EnabledControlSummary], nextToken: String? = nil) {
            self.enabledControls = enabledControls
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case enabledControls = "enabledControls"
            case nextToken = "nextToken"
        }
    }

    public struct ListLandingZoneOperationsInput: AWSEncodableShape {
        /// An input filter for the ListLandingZoneOperations API that lets you select the types of landing zone operations to view.
        public let filter: LandingZoneOperationFilter?
        /// How many results to return per API call.
        public let maxResults: Int?
        /// The token to continue the list from a previous API call with the same parameters.
        public let nextToken: String?

        @inlinable
        public init(filter: LandingZoneOperationFilter? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.filter = filter
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.filter?.validate(name: "\(name).filter")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 100)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case filter = "filter"
            case maxResults = "maxResults"
            case nextToken = "nextToken"
        }
    }

    public struct ListLandingZoneOperationsOutput: AWSDecodableShape {
        /// Lists landing zone operations.
        public let landingZoneOperations: [LandingZoneOperationSummary]
        /// Retrieves the next page of results. If the string is empty, the response is the end of the results.
        public let nextToken: String?

        @inlinable
        public init(landingZoneOperations: [LandingZoneOperationSummary], nextToken: String? = nil) {
            self.landingZoneOperations = landingZoneOperations
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case landingZoneOperations = "landingZoneOperations"
            case nextToken = "nextToken"
        }
    }

    public struct ListLandingZonesInput: AWSEncodableShape {
        /// The maximum number of returned landing zone ARNs, which is one.
        public let maxResults: Int?
        /// The token to continue the list from a previous API call with the same parameters.
        public let nextToken: String?

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "maxResults"
            case nextToken = "nextToken"
        }
    }

    public struct ListLandingZonesOutput: AWSDecodableShape {
        /// The ARN of the landing zone.
        public let landingZones: [LandingZoneSummary]
        /// Retrieves the next page of results. If the string is empty, the response is the end of the results.
        public let nextToken: String?

        @inlinable
        public init(landingZones: [LandingZoneSummary], nextToken: String? = nil) {
            self.landingZones = landingZones
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case landingZones = "landingZones"
            case nextToken = "nextToken"
        }
    }

    public struct ListTagsForResourceInput: AWSEncodableShape {
        ///  The ARN of the resource.
        public let resourceArn: String

        @inlinable
        public init(resourceArn: String) {
            self.resourceArn = resourceArn
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.resourceArn, key: "resourceArn")
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, max: 2048)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, min: 20)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTagsForResourceOutput: AWSDecodableShape {
        /// A list of tags, as key:value strings.
        public let tags: [String: String]

        @inlinable
        public init(tags: [String: String]) {
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "tags"
        }
    }

    public struct Region: AWSDecodableShape {
        /// The Amazon Web Services Region name.
        public let name: String?

        @inlinable
        public init(name: String? = nil) {
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case name = "name"
        }
    }

    public struct ResetEnabledBaselineInput: AWSEncodableShape {
        /// Specifies the ID of the EnabledBaseline resource to be re-enabled, in ARN format.
        public let enabledBaselineIdentifier: String

        @inlinable
        public init(enabledBaselineIdentifier: String) {
            self.enabledBaselineIdentifier = enabledBaselineIdentifier
        }

        public func validate(name: String) throws {
            try self.validate(self.enabledBaselineIdentifier, name: "enabledBaselineIdentifier", parent: name, max: 2048)
            try self.validate(self.enabledBaselineIdentifier, name: "enabledBaselineIdentifier", parent: name, min: 20)
            try self.validate(self.enabledBaselineIdentifier, name: "enabledBaselineIdentifier", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case enabledBaselineIdentifier = "enabledBaselineIdentifier"
        }
    }

    public struct ResetEnabledBaselineOutput: AWSDecodableShape {
        /// The ID (in UUID format) of the asynchronous ResetEnabledBaseline operation. This operationIdentifier is used to track status through calls to the GetBaselineOperation API.
        public let operationIdentifier: String

        @inlinable
        public init(operationIdentifier: String) {
            self.operationIdentifier = operationIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case operationIdentifier = "operationIdentifier"
        }
    }

    public struct ResetEnabledControlInput: AWSEncodableShape {
        /// The ARN of the enabled control to be reset.
        public let enabledControlIdentifier: String

        @inlinable
        public init(enabledControlIdentifier: String) {
            self.enabledControlIdentifier = enabledControlIdentifier
        }

        public func validate(name: String) throws {
            try self.validate(self.enabledControlIdentifier, name: "enabledControlIdentifier", parent: name, max: 2048)
            try self.validate(self.enabledControlIdentifier, name: "enabledControlIdentifier", parent: name, min: 20)
            try self.validate(self.enabledControlIdentifier, name: "enabledControlIdentifier", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case enabledControlIdentifier = "enabledControlIdentifier"
        }
    }

    public struct ResetEnabledControlOutput: AWSDecodableShape {
        ///  The operation identifier for this ResetEnabledControl operation.
        public let operationIdentifier: String

        @inlinable
        public init(operationIdentifier: String) {
            self.operationIdentifier = operationIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case operationIdentifier = "operationIdentifier"
        }
    }

    public struct ResetLandingZoneInput: AWSEncodableShape {
        /// The unique identifier of the landing zone.
        public let landingZoneIdentifier: String

        @inlinable
        public init(landingZoneIdentifier: String) {
            self.landingZoneIdentifier = landingZoneIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case landingZoneIdentifier = "landingZoneIdentifier"
        }
    }

    public struct ResetLandingZoneOutput: AWSDecodableShape {
        /// A unique identifier assigned to a ResetLandingZone operation. You can use this identifier as an input parameter of GetLandingZoneOperation to check the operation's status.
        public let operationIdentifier: String

        @inlinable
        public init(operationIdentifier: String) {
            self.operationIdentifier = operationIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case operationIdentifier = "operationIdentifier"
        }
    }

    public struct TagResourceInput: AWSEncodableShape {
        /// The ARN of the resource to be tagged.
        public let resourceArn: String
        /// Tags to be applied to the resource.
        public let tags: [String: String]

        @inlinable
        public init(resourceArn: String, tags: [String: String]) {
            self.resourceArn = resourceArn
            self.tags = tags
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.resourceArn, key: "resourceArn")
            try container.encode(self.tags, forKey: .tags)
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, max: 2048)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, min: 20)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
            try self.tags.forEach {
                try validate($0.key, name: "tags.key", parent: name, max: 128)
                try validate($0.key, name: "tags.key", parent: name, min: 1)
                try validate($0.value, name: "tags[\"\($0.key)\"]", parent: name, max: 256)
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 200)
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "tags"
        }
    }

    public struct TagResourceOutput: AWSDecodableShape {
        public init() {}
    }

    public struct ThrottlingException: AWSErrorShape {
        public let message: String
        /// The ID of the service quota that was exceeded.
        public let quotaCode: String?
        /// The number of seconds the caller should wait before retrying.
        public let retryAfterSeconds: Int?
        /// The ID of the service that is associated with the error.
        public let serviceCode: String?

        @inlinable
        public init(message: String, quotaCode: String? = nil, retryAfterSeconds: Int? = nil, serviceCode: String? = nil) {
            self.message = message
            self.quotaCode = quotaCode
            self.retryAfterSeconds = retryAfterSeconds
            self.serviceCode = serviceCode
        }

        public init(from decoder: Decoder) throws {
            let response = decoder.userInfo[.awsResponse]! as! ResponseDecodingContainer
            let container = try decoder.container(keyedBy: CodingKeys.self)
            self.message = try container.decode(String.self, forKey: .message)
            self.quotaCode = try container.decodeIfPresent(String.self, forKey: .quotaCode)
            self.retryAfterSeconds = try response.decodeHeaderIfPresent(Int.self, key: "Retry-After")
            self.serviceCode = try container.decodeIfPresent(String.self, forKey: .serviceCode)
        }

        private enum CodingKeys: String, CodingKey {
            case message = "message"
            case quotaCode = "quotaCode"
            case serviceCode = "serviceCode"
        }
    }

    public struct UntagResourceInput: AWSEncodableShape {
        /// The ARN of the resource.
        public let resourceArn: String
        /// Tag keys to be removed from the resource.
        public let tagKeys: [String]

        @inlinable
        public init(resourceArn: String, tagKeys: [String]) {
            self.resourceArn = resourceArn
            self.tagKeys = tagKeys
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.resourceArn, key: "resourceArn")
            request.encodeQuery(self.tagKeys, key: "tagKeys")
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, max: 2048)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, min: 20)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
            try self.tagKeys.forEach {
                try validate($0, name: "tagKeys[]", parent: name, max: 128)
                try validate($0, name: "tagKeys[]", parent: name, min: 1)
            }
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, max: 200)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct UntagResourceOutput: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateEnabledBaselineInput: AWSEncodableShape {
        /// Specifies the new Baseline version, to which the EnabledBaseline should be updated.
        public let baselineVersion: String
        /// Specifies the EnabledBaseline resource to be updated.
        public let enabledBaselineIdentifier: String
        /// Parameters to apply when making an update.
        public let parameters: [EnabledBaselineParameter]?

        @inlinable
        public init(baselineVersion: String, enabledBaselineIdentifier: String, parameters: [EnabledBaselineParameter]? = nil) {
            self.baselineVersion = baselineVersion
            self.enabledBaselineIdentifier = enabledBaselineIdentifier
            self.parameters = parameters
        }

        public func validate(name: String) throws {
            try self.validate(self.baselineVersion, name: "baselineVersion", parent: name, max: 10)
            try self.validate(self.baselineVersion, name: "baselineVersion", parent: name, min: 1)
            try self.validate(self.baselineVersion, name: "baselineVersion", parent: name, pattern: "^\\d+(?:\\.\\d+){0,2}$")
            try self.validate(self.enabledBaselineIdentifier, name: "enabledBaselineIdentifier", parent: name, max: 2048)
            try self.validate(self.enabledBaselineIdentifier, name: "enabledBaselineIdentifier", parent: name, min: 20)
            try self.validate(self.enabledBaselineIdentifier, name: "enabledBaselineIdentifier", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case baselineVersion = "baselineVersion"
            case enabledBaselineIdentifier = "enabledBaselineIdentifier"
            case parameters = "parameters"
        }
    }

    public struct UpdateEnabledBaselineOutput: AWSDecodableShape {
        /// The ID (in UUID format) of the asynchronous UpdateEnabledBaseline operation. This operationIdentifier is used to track status through calls to the GetBaselineOperation API.
        public let operationIdentifier: String

        @inlinable
        public init(operationIdentifier: String) {
            self.operationIdentifier = operationIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case operationIdentifier = "operationIdentifier"
        }
    }

    public struct UpdateEnabledControlInput: AWSEncodableShape {
        ///  The ARN of the enabled control that will be updated.
        public let enabledControlIdentifier: String
        /// A key/value pair, where Key is of type String and Value is of type Document.
        public let parameters: [EnabledControlParameter]

        @inlinable
        public init(enabledControlIdentifier: String, parameters: [EnabledControlParameter]) {
            self.enabledControlIdentifier = enabledControlIdentifier
            self.parameters = parameters
        }

        public func validate(name: String) throws {
            try self.validate(self.enabledControlIdentifier, name: "enabledControlIdentifier", parent: name, max: 2048)
            try self.validate(self.enabledControlIdentifier, name: "enabledControlIdentifier", parent: name, min: 20)
            try self.validate(self.enabledControlIdentifier, name: "enabledControlIdentifier", parent: name, pattern: "^arn:aws[0-9a-zA-Z_\\-:\\/]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case enabledControlIdentifier = "enabledControlIdentifier"
            case parameters = "parameters"
        }
    }

    public struct UpdateEnabledControlOutput: AWSDecodableShape {
        ///  The operation identifier for this UpdateEnabledControl operation.
        public let operationIdentifier: String

        @inlinable
        public init(operationIdentifier: String) {
            self.operationIdentifier = operationIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case operationIdentifier = "operationIdentifier"
        }
    }

    public struct UpdateLandingZoneInput: AWSEncodableShape {
        /// The unique identifier of the landing zone.
        public let landingZoneIdentifier: String
        /// The manifest file (JSON) is a text file that describes your Amazon Web Services resources. For an example, review Launch your landing zone. The example manifest file contains each of the available parameters. The schema for the landing zone's JSON manifest file is not published, by design.
        public let manifest: AWSDocument
        /// The landing zone version, for example, 3.2.
        public let version: String

        @inlinable
        public init(landingZoneIdentifier: String, manifest: AWSDocument, version: String) {
            self.landingZoneIdentifier = landingZoneIdentifier
            self.manifest = manifest
            self.version = version
        }

        public func validate(name: String) throws {
            try self.validate(self.version, name: "version", parent: name, max: 10)
            try self.validate(self.version, name: "version", parent: name, min: 3)
            try self.validate(self.version, name: "version", parent: name, pattern: "^\\d+.\\d+$")
        }

        private enum CodingKeys: String, CodingKey {
            case landingZoneIdentifier = "landingZoneIdentifier"
            case manifest = "manifest"
            case version = "version"
        }
    }

    public struct UpdateLandingZoneOutput: AWSDecodableShape {
        /// A unique identifier assigned to a UpdateLandingZone operation. You can use this identifier as an input of GetLandingZoneOperation to check the operation's status.
        public let operationIdentifier: String

        @inlinable
        public init(operationIdentifier: String) {
            self.operationIdentifier = operationIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case operationIdentifier = "operationIdentifier"
        }
    }
}

// MARK: - Errors

/// Error enum for ControlTower
public struct ControlTowerErrorType: AWSErrorType {
    enum Code: String {
        case accessDeniedException = "AccessDeniedException"
        case conflictException = "ConflictException"
        case internalServerException = "InternalServerException"
        case resourceNotFoundException = "ResourceNotFoundException"
        case serviceQuotaExceededException = "ServiceQuotaExceededException"
        case throttlingException = "ThrottlingException"
        case validationException = "ValidationException"
    }

    private let error: Code
    public let context: AWSErrorContext?

    /// initialize ControlTower
    public init?(errorCode: String, context: AWSErrorContext) {
        guard let error = Code(rawValue: errorCode) else { return nil }
        self.error = error
        self.context = context
    }

    internal init(_ error: Code) {
        self.error = error
        self.context = nil
    }

    /// return error code string
    public var errorCode: String { self.error.rawValue }

    /// You do not have sufficient access to perform this action.
    public static var accessDeniedException: Self { .init(.accessDeniedException) }
    /// Updating or deleting the resource can cause an inconsistent state.
    public static var conflictException: Self { .init(.conflictException) }
    /// An unexpected error occurred during processing of a request.
    public static var internalServerException: Self { .init(.internalServerException) }
    /// The request references a resource that does not exist.
    public static var resourceNotFoundException: Self { .init(.resourceNotFoundException) }
    /// The request would cause a service quota to be exceeded. The limit is 100 concurrent operations.
    public static var serviceQuotaExceededException: Self { .init(.serviceQuotaExceededException) }
    /// The request was denied due to request throttling.
    public static var throttlingException: Self { .init(.throttlingException) }
    /// The input does not satisfy the constraints specified by an Amazon Web Services service.
    public static var validationException: Self { .init(.validationException) }
}

extension ControlTowerErrorType: AWSServiceErrorType {
    public static let errorCodeMap: [String: AWSErrorShape.Type] = [
        "ThrottlingException": ControlTower.ThrottlingException.self
    ]
}

extension ControlTowerErrorType: Equatable {
    public static func == (lhs: ControlTowerErrorType, rhs: ControlTowerErrorType) -> Bool {
        lhs.error == rhs.error
    }
}

extension ControlTowerErrorType: CustomStringConvertible {
    public var description: String {
        return "\(self.error.rawValue): \(self.message ?? "")"
    }
}
